Skip to content

preview: nerd tier spinner, U+EE06-EE0B (do not merge as-is) - #2

Closed
DanielCarmingham wants to merge 2 commits into
mainfrom
preview/nerd-spinner
Closed

preview: nerd tier spinner, U+EE06-EE0B (do not merge as-is)#2
DanielCarmingham wants to merge 2 commits into
mainfrom
preview/nerd-spinner

Conversation

@DanielCarmingham

Copy link
Copy Markdown
Owner

Preview only — do not merge as-is. The second commit adds a preview/ directory that must be dropped first.

Swaps the nerd tier's spinner from braille to nf-extra-progress_spinner_1..6 at U+EE06–EE0B.

Does it rotate, or just twitch?

The one question a still image can't answer. Six frames at 80ms, the same cadence pulse::FRAME uses:

rotation at 80ms

The frames

Blown up ~5x, then at the size a terminal actually draws them, with the braille they replace underneath for comparison:

the six frames

In the app

Same seeded store, same width. Look at the two in-progress rows — "Ship dextui v1" and "Core data layer":

new vs old in the app

Alignment

The | bars are the test from scripts/glyph-check.py — a glyph that isn't exactly one cell makes them go ragged:

alignment test

Why

Braille is not in FiraCode Nerd Font — 0 of its 11,992 codepoints — so macOS substitutes Apple Braille at 1.111 cells, and the marker column only survives because terminals snap a glyph into their own cell rather than honouring the advance. These six are really in the font: advance 1200 against a space of 1200, exactly 1.000 cells, read from the font's own hmtx table rather than the cheat sheet.

They also sit directly after the U+EE00–EE05 progress-bar kit the meter already composes, so both of this tier's moving parts now come from the same Nerd Fonts 3.3.0 set.

The catch

The arc is a thin single stroke; braille was a denser cluster. It's lighter at 1x — that's the trade to judge, and it's why the app comparison is here.

Cost

Nil. This was once rejected as "a second animation model for one tier, not worth two code paths", but spin is already a per-tier slice and pulse::frame already takes the frame count, so six frames here and ten elsewhere needed no branch. Repaint rate unchanged — the schedule is FRAME, not the frame count. 417 tests, clippy clean.

https://claude.ai/code/session_019vddQQKM4N7Mu72Cdqn9iy

nf-extra-progress_spinner_1..6 at U+EE06-EE0B, replacing the braille this
tier shared with the unicode one.

The braille is not in FiraCode Nerd Font -- 0 of its 11,992 codepoints --
so macOS substitutes Apple Braille at 1.111 cells, and the marker column
only survives because terminals snap a glyph into their own cell rather
than honouring the advance. These six are really in the font, with an
advance of 1200 against a space of 1200: exactly 1.000 cells, read out of
the font's own hmtx table rather than taken from the cheat sheet. The tier
no longer depends on that grace.

They also sit directly after the U+EE00-EE05 progress-bar kit the meter
already composes, so both of this tier's moving parts now come from the
same Nerd Fonts 3.3.0 set.

This was once rejected as "a second animation model for one tier, not
worth two code paths". That cost turned out to be nil: `spin` is already a
per-tier slice and `pulse::frame` already takes the frame count, so six
frames here and ten elsewhere is what the types were built for. No branch,
no second path, and the repaint rate is unchanged because the schedule is
FRAME, not the frame count.

Also corrects the doc on `active`, which claimed it is "always spin[0]".
It is not, in any tier -- nerd is fa-play against a braille dot, ascii is
`>` against `*` -- and the claim contradicts the rule
with_animation_off_the_marker_is_the_still_glyph pins.

Claude-Session: https://claude.ai/code/session_019vddQQKM4N7Mu72Cdqn9iy
Not part of the change. Pushed only so the glyphs can be looked at on a
device whose terminal has no Nerd Font, which is where this is being
reviewed -- and so the GIF animates, since whether six frames read as a
rotation or a twitch is the one question a still image cannot answer.

Delete this commit before merging; `preview/` has no business in the repo
or in the crate tarball.

Claude-Session: https://claude.ai/code/session_019vddQQKM4N7Mu72Cdqn9iy
@DanielCarmingham

Copy link
Copy Markdown
Owner Author

Rejected: the braille pops more at real terminal size. The arc is correct on font metrics but too thin a stroke to read as a state marker, which is the job. Keeping braille.

@DanielCarmingham
DanielCarmingham deleted the preview/nerd-spinner branch August 9, 2026 13:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant